package facade;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import javax.persistence.Query;

import com.sun.org.apache.bcel.internal.generic.RETURN;

import Entidade.AnexoAulaEvento;
import Entidade.AulaEvento;

import VO.AnexoAulaEventoVO;
import VO.AulaEventoVO;


public class FacadeAulalEventoImpl implements FacadeAulalEvento{

	
	public static String entidade ="sistemaDarlan";
	
	public AulaEventoVO buscaAulaEvento(Integer id) throws TrataErroPersistecia {

		AulaEvento m = new AulaEvento();
		AulaEventoVO vo = new AulaEventoVO();
		
		 try{
			  EntityManager manager = Persistence.createEntityManagerFactory(entidade).createEntityManager();
			manager.getTransaction().begin();
		     m = (AulaEvento) manager.find(AulaEvento.class,id);
		     List <AnexoAulaEventoVO> aux = new ArrayList<AnexoAulaEventoVO>();
		     
		     for(AnexoAulaEvento a : m.getAnexos()){
		    		AnexoAulaEventoVO  v = new AnexoAulaEventoVO();		
		    		v.setAnexo(a.getAnexo());
			    	v.setDescricao(a.getDescricao());
			    	v.setNome(a.getNome());
			    	v.setId(a.getId());
			    	v.setAulaEventoVO(vo);
			    	aux.add(v);
			    	//vo.getAnexo().add(v);
			     
		     }
		     vo.setAnexo(aux);
		     
		     vo.setDescricao(m.getDescricao());
		     vo.setId(m.getId());
		     vo.setTipo("");
		     
		    manager.getTransaction().commit();
		    manager.close();
		    
		    return vo;
		  }catch  (Exception e){
			    e.getMessage();
			
		  }
		
		
		return null;
	}

	public List<AnexoAulaEventoVO> buscaTodosAnexoAulaEvento(Integer idAula)
			throws TrataErroPersistecia {
		
		AulaEvento m = new AulaEvento();
		List <AnexoAulaEventoVO> vo = new ArrayList<AnexoAulaEventoVO>();
		 try{
			  EntityManager manager = Persistence.createEntityManagerFactory(entidade).createEntityManager();
		     manager.getTransaction().begin();
		     
		   
		    m = manager.find(AulaEvento.class,idAula);
		    
		    for(AnexoAulaEvento a : m.getAnexos()){
				   AnexoAulaEventoVO v = new AnexoAulaEventoVO();
				   v.setAnexo(a.getAnexo());
				   v.setDescricao(a.getDescricao());
				   v.setNome(a.getNome());
				   v.setId(a.getId());
		
				   vo.add(v);
		    }
		
		    manager.getTransaction().commit();
		    manager.close();
		    
		    return vo;
		  
		  }catch  (Exception e){
			    e.getMessage();
			
		  }
		
		return null;
	}

	public List<AulaEventoVO> buscaTodosAulaEvento( boolean comAnexo)
			throws TrataErroPersistecia {
		try{
		    EntityManager manager = Persistence.createEntityManagerFactory(entidade).createEntityManager();
			Query q = manager.createQuery("from AulaEvento f");
		
			List<AulaEventoVO>  mVo= new ArrayList<AulaEventoVO>(); 
			
			List<AulaEvento> resultList =q.getResultList();
			
			for(AulaEvento m : resultList){
				
				AulaEventoVO vo = new AulaEventoVO();
				if(comAnexo){
					for(AnexoAulaEvento a : m.getAnexos()){
					      for(AnexoAulaEventoVO v : vo.getAnexo()){
					    	  
					    	v.setAnexo(a.getAnexo());
					    	vo.getAnexo().add(v);
					       }
				     }
				}
				  
				else
				vo.setAnexo(null);
				vo.setDescricao(m.getDescricao());
				vo.setTipo("");
				vo.setId(m.getId());
				
				mVo.add(vo);
			}
				
			
			
			return mVo;
			
		}catch (Exception e){
			e.getMessage();
		}
		
		return null;
	}

	public void excluirAnexoAula(AnexoAulaEventoVO vo)
			throws TrataErroPersistecia {
		AnexoAulaEvento m = new AnexoAulaEvento();
		
		try{
			  EntityManager manager = Persistence.createEntityManagerFactory(entidade).createEntityManager();
		     manager.getTransaction().begin();
		     
		   
		    m = manager.find(AnexoAulaEvento.class,vo.getId());
		     
		     
		     manager.merge(m);
		     manager.remove(m);
		   
		    manager.getTransaction().commit();
		    manager.close();
		    
		  
		  }catch  (Exception e){
			    e.getMessage();
			
		  }
		
	}

	public void excluirAulaEvento(AulaEventoVO vo) throws Exception {
		AulaEvento m = new AulaEvento();
		 try{
			  EntityManager manager = Persistence.createEntityManagerFactory(entidade).createEntityManager();
		     manager.getTransaction().begin();
		     
		   
		    m = manager.find(AulaEvento.class,vo.getId());
		     
		     
		     manager.merge(m);
		     manager.remove(m);
		   
		    manager.getTransaction().commit();
		    manager.close();
		    
		  
		  }catch  (Exception e){
			    e.getMessage();
			
		  }
		
	}

	public void salvarAulaEvento(AulaEventoVO vo) throws TrataErroPersistecia {
		AulaEvento m = new AulaEvento();
		List <AnexoAulaEvento> lA = new ArrayList<AnexoAulaEvento>(); 
	
		m.setDescricao(vo.getDescricao());
		m.setTipo(vo.getTipo());
		m.setId(vo.getId());
		
		
		  try{
			  EntityManager manager = Persistence.createEntityManagerFactory(entidade).createEntityManager();
			manager.getTransaction().begin();
			
			for(AnexoAulaEventoVO a : vo.getAnexo()){
			  AnexoAulaEvento enti = manager.find(AnexoAulaEvento.class,a.getId());
			  m.getAnexos().add(enti);
			}
			  
			if(m.getId().equals(0) || m.getId()==null)
		       manager.persist(m);
			else
				manager.merge(m);
		
		    manager.getTransaction().commit();
		    manager.close();
		    
		  }catch  (Exception e){
			    e.getMessage();
			
		  }
		
	}

	public void salvar(AnexoAulaEventoVO vo,Integer idAula) throws TrataErroPersistecia {
		
		
		try{
			  AulaEvento m = new AulaEvento();
			  AnexoAulaEvento a = new AnexoAulaEvento();
			  AulaEventoVO aVO = new AulaEventoVO();
			  
			  a.setAnexo(vo.getAnexo());
			  a.setDescricao(vo.getDescricao());
			  a.setNome(vo.getNome());
			//  a.setAulaEvento(vo.getAulaEventoVO())
			  
			  			  EntityManager manager = Persistence.createEntityManagerFactory(entidade).createEntityManager();
			manager.getTransaction().begin();
			
			  m = (AulaEvento) manager.find(AulaEvento.class,idAula);			  
			  
			  a.setAulaEvento(m);
			  m.getAnexos().add(a);
			  
			  
		    manager.persist(a);
		
		    manager.getTransaction().commit();
		    manager.close();
		    
		  }catch  (Exception e){
			    e.getMessage();
			
		  }
		  
		  
		
	}

	public AnexoAulaEventoVO buscaAnexoAulaEvento(Integer id)
			throws TrataErroPersistecia {
		
		
			AnexoAulaEventoVO vo = new AnexoAulaEventoVO(); 
			AnexoAulaEvento m = new AnexoAulaEvento();
		
		try{
			  EntityManager manager = Persistence.createEntityManagerFactory(entidade).createEntityManager();
		     manager.getTransaction().begin();
		     
		   
		    m = manager.find(AnexoAulaEvento.class,id);
		    
		    manager.getTransaction().commit();
		    manager.close();
		    
		    vo.setAnexo(m.getAnexo());
		    vo.setDescricao(m.getDescricao());
		    vo.setNome(m.getNome());
		    vo.setId(m.getId());
		    
		    return vo;
		    //vo.setAulaEventoVO(m.getAulaEvento());
		    
		  
		  }catch  (Exception e){
			    e.getMessage();
			
		  }
		
		
		
		
		return null;
	}

	public void salvarAulaEventoNovo(AulaEventoVO vo)
			throws TrataErroPersistecia {
		AulaEvento m = new AulaEvento();
	    m.setDescricao(vo.getDescricao());
		m.setTipo(vo.getTipo());
		
		
		  try{
			  EntityManager manager = Persistence.createEntityManagerFactory(entidade).createEntityManager();
			manager.getTransaction().begin();
		
			manager.persist(m);
			
		    manager.getTransaction().commit();
		    manager.close();
		    
		  }catch  (Exception e){
			    e.getMessage();
			
		  }
		
	}


}
